﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;

class PersonStatic
{
public:
	PersonStatic()
	{
		//m_Age = 10;
	}

	//1.加上static就是静态成员变量，会共享数据；静态成员变量，在类内声明，类外进行初始化；
	static int m_Age;

	int m_A;

	//7.静态成员函数；不可以访问，普通成员变量；可以访问，静态成员变量；
	static void funcStatic()
	{
		//m_A = 60;
		m_Age = 70;
		cout << "funcStatic()的调用！" << endl;
	}
	//10.普通成员函数，可以访问普通成员变量，也可以访问静态成员变量；
	void myFunc()
	{
		m_A = 80;
		m_Age = 90;
	}


	//6.静态成员变量也有权限；私有权限，在类外不能访问；
private:
	static int m_Other;
	static void funcStaticPrivate()
	{
		cout << "funcStaticPrivate()的调用！" << endl;
	}
};
//2.类外初始化实现；
int PersonStatic::m_Age = 20;
int PersonStatic::m_Other = 50;

void testStaticMember()
{
	//3.通过对象共享数据；
	PersonStatic p1;
	p1.m_Age = 30;
	PersonStatic p2;
	p2.m_Age = 40;

	//4.共享数据，两个都是40，因为m_Age是静态成员变量；
	cout << "p1.m_Age= " << p1.m_Age << endl;//40
	cout << "p2.m_Age= " << p2.m_Age << endl;//40

	//5.通过类名访问属性；
	cout << "通过类名访问属性PersonStatic::m_Age= " << PersonStatic::m_Age << endl;//40
	//cout << "通过类名访问属性PersonStatic::m_Other= " << PersonStatic::m_Other << endl;

	//8.静态成员函数调用；
	p1.funcStatic();//funcStatic()的调用！
	p2.funcStatic();//funcStatic()的调用！
	PersonStatic::funcStatic();//funcStatic()的调用！

	//9.静态成员函数，也是有权限的；
	//PersonStatic::funcStaticPrivate();
}

//main256：静态成员变量和成员函数
int main266()
{
	testStaticMember();

	system("pause");
	return EXIT_SUCCESS;
}